/*********************************************************************
 *  Nome : Bruno Ferrero                             N.USP 3690142
 *  Nome : Mariana Pacheco Hatamura                  N.USP 4906967 
 *  Nome : Tiago Nicolosi Bomventi                   N.USP 3690177 
 *  Curso: BCC                                 Disciplina: MAC 211
 *  Data : 5/5/2010                       Exercic. Projeto(parte 1)
 *  Compilador utilizado : gcc versao 4.1.2
 *  ******************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "item.h"
#include "fisica.h"
#include "oceano.h"

void estatisticaVelocidade(float velMediaEsperada);

int main(int argc, char *argv[]) {
    float freq, velMedia;
    int semente;

    /*argumentos de entrada*/
    if (argc == 2) {
        freq = atof (argv[1]);
        velMedia = 1;
        srand (time (NULL));
    }
    else if (argc == 3) {
        freq = atof (argv[1]);
        velMedia = atof (argv[2]);
        srand (time (NULL));
    }
    else if (argc == 4) {
        freq = atof (argv[1]);
        velMedia = atof (argv[2]);
        semente = atoi (argv[3]); 
        srand (semente);
    }
    /*parametros default*/
    else {
        freq = 0.5;
        velMedia = 1;
        srand (time (NULL));
    }

    setFreqGeraPassageiro(freq);
    setMediaDaVelocidadeGerada(velMedia,0.5);

    limpaOceano ();
    inicializaVetorNaufragos();
    populaCoral(20);
    populaNaufragos(60);
    /*limpaJanela();
      imprimeOceano ();
      incrementaTempo(1);*/
    printf("<pressione ENTER para comecar>\n");
    while(getchar() != 'e' && numNaufragosNoVetor() > 0) {
        limpaJanela();
        printf("Tempo = %d, Passageiros gerados = %d, freq_media de geracao = %g, frequencia esperada = %g\n", getTempo(), numNaufragosNovos(), numNaufragosNovos() / (float) getTempo(), freq);
        estatisticaVelocidade(velMedia);
        imprimeOceano ();
        printf("Oque vai acontecer no proximo quadro:\n");
        calculaProximoEstadoNaufragos();	
        iteracaoParaProximoPasso();
        frequenciaGeracaoNaufrago();
        incrementaTempo(1);
        printf("<pressione 'e' para sair da simulacao>\n");
    }
    return 0;
}

/*lista parametros pedidos para teste*/
void estatisticaVelocidade(float velMediaEsperada){
    float posx, posy, vx, vy, max, min, vel, dir, soma;
    int naufragos;
    naufrago *next, *primeiro;
    naufragos=0;
    soma=0;
    max=0;
    min=1.4;

    primeiro = nextNaufrago(); 
    next = primeiro;
    do {
        getNaufragoPosVel(next, &posx, &posy, &vx, &vy);
        euclidianoParaPolar (vx, vy, &dir, &vel);
        if(vel > max) max = vel;
        if(vel < min) min = vel;
        soma+=vel;
        naufragos++;
        next = nextNaufrago();
    } while(next != primeiro && next != NULL);
    printf("Velocida maxima = %g, minima = %g, media = %g, media esperada = %g\n", max, min, soma/(float) naufragos, velMediaEsperada);
}

